<template>
  <h2>当前求和：{{ sum }}</h2>
  <button @click="add">点击+1</button>
  <h2>当前信息：{{ msg }}</h2>
  <button @click="msg += '!'">点击增加感叹号</button>
  <br />
  <h1>姓名：{{ person.name }}</h1>
  <h1>年龄：{{ person.age }}</h1>
  <button @click="person.name += '~'">修改姓名</button>
  <br />
  <button @click="person.age++">增长年龄</button>
  <br />
  <h1>薪资：{{ person.job.j1.salary }}K</h1>
  <br />
  <button @click="person.job.j1.salary++">涨薪</button>
</template>

<script>
// 体现出了组合式API的使用
import { ref, watch } from "vue";
export default {
  name: "myDemo",
  setup() {
    let sum = ref(0);
    let msg = ref("你好啊");
    let person = ref({
      name: "张三",
      age: 18,
      job: {
        j1: {
          salary: 10,
        },
      },
    });

    function add() {
      sum.value++;
    }

    // (1)由于ref的.value值是定的，没有必要监视，因此会出现警报无法监视
    //    而直接监视ref对象(其value可能会变)便可以监视了（有点类似字面量和变量的区别）
    // watch(sum.value, (newValue, oldValue) => {
    //    console.log('sum被监视了：',newValue,oldValue);
    // })

    // (2)无法监视到，ref的person是个proxy对象，而只要对象地址不变，就认为没有变化
    // 解决方法：1.加deep:true(不仅监视对象地址，还监视里面的属性)
    //          2.加.value，这时监视的是reactive的proxy对象，强制deep:true
    watch(person.value,(newValue, oldValue) => {
       console.log('person被监视了：',newValue,oldValue);
    })

    return {
      sum,
      add,
      msg,
      person,
    };
  },
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped></style>
